/*
 * Copyright (c) 2025 Industrial Software Feature Database
 */
package com.comac.ins.bomt.repository;

import com.comac.ins.bomt.domain.DetailStrengthV2Bom;
import com.comac.ins.bomt.domain.OriginalBomV2Info;
import com.comac.ins.bomt.domain.StandardBomV2Info;
import com.comac.ins.bomt.domain.vo.*;
import com.comac.ins.common.core.domain.model.LoginUser;

import java.util.List;
import java.util.Map;

/**
 * Bom仓储
 * 原则上所有Bom相关的写操作均需要经过此层
 *
 * @author zhanghongyi
 * @date 2024 /8/13 11:10
 * @description BomRepository
 */
public interface BomRepositoryV2 {
    /**
     * 初始化原始装机清单
     *
     * @param loginUser     the login user
     * @param originalBomV2InfoVo 原始清单信息
     * @return the list
     */
    void initOriginalBom(LoginUser loginUser, OriginalBomV2InfoVo originalBomV2InfoVo);


    /**
     * 初始化标准装机清单
     *
     * @param loginUser               登录用户
     * @param originalBomV2InfoVo     原始bom v2信息vo
     * @param detailStandardBomVosMap 详细标准bom-vos地图
     */
    Map<String,Long> initStandardBom(LoginUser loginUser,OriginalBomV2InfoVo originalBomV2InfoVo, Map<String, List<DetailStandardV2BomVo>> detailStandardBomVosMap,String desc);

    /**
     * 初始化强度数模清单
     *
     * @param loginUser               登录用户
     * @param standardBomV2Info      关联的标准装机清单
     * @param details 明细
     */
    void initStrengthBom(LoginUser loginUser,String groupCode,String groupName,StandardBomV2Info standardBomV2Info, List<DetailStrengthV2Bom> details,Map<String,Long> sectionStandardInfoIdMap);

    /**
     * 修改原始装机清单
     *
     * @param loginUser     the login user
     * @param modifyDetail  the modify detail
     * @return the list
     */
    void modifyOriginalBom(LoginUser loginUser, DetailOriginalV2BomVo modifyDetail);
    /**
     * 复制标准装机清单
     *
     * @param loginUser        登录用户
     * @param srcStandardBomId 来源的标准装机清单Id
     * @param deleteDetailIds  删除详细信息ID
     * @param desc             描述
     */
    void copyStandardBom(LoginUser loginUser, Long srcStandardBomId, List<Long> deleteDetailIds,List<DetailStandardV2BomVo> modifyDetails, String desc);

    /**
     * 修改强度数模清单
     *
     * @param loginUser        登录用户
     * @param srcStrengthBomId 来源强度数模清单Id
     * @param deleteDetailIds  删除详细信息ID
     * @param desc             描述
     */
    void modifyStrengthBom(LoginUser loginUser, Long srcStrengthBomId, List<Long> deleteDetailIds,List<DetailStrengthV2BomVo> modifyDetails, String desc);

    /**
     * 删除原始装机清单明细
     *
     * @param loginUser     the login user
     * @param deleteIds 原始清单信息
     * @return the list
     */
    void deleteOriginalBomDetails(LoginUser loginUser, List<Long> deleteIds);

    /**
     * 删除原始装机清单信息
     *
     * @param loginUser     the login user
     * @param deleteIds 原始清单信息
     * @return the list
     */
    void deleteOriginalBomInfos(LoginUser loginUser,List<Long> deleteIds);
    /**
     * 更新原始bom信息
     *
     * @param originalBomV2Info 原始bom信息
     */
    void updateOriginalBomInfo(OriginalBomV2Info originalBomV2Info);
    /**
     * 更新标准bom信息
     *
     * @param standardBomV2Info 标准bom信息
     */
    void updateStandardBomInfo(StandardBomV2Info standardBomV2Info);
}
